// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

const db = cloud.database()

// 确保所有商品都有必要的属性
function sanitizeCartItems(items) {
  if (!items || !Array.isArray(items)) return [];

  return items.map(item => {
    // 确保每个商品都有基本属性
    const safeItem = {
      id: item.id || 0,
      name: item.name || '商品',
      price: parseFloat(item.price || 0),
      image: item.image || '/images/products/default.jpg',
      quantity: parseInt(item.quantity || 1),
      itemTotal: parseFloat(item.itemTotal || item.price || 0),

      // 确保有必要的属性对象
      size: item.size || { id: 1, name: '常规', price: 0 },
      sugar: item.sugar || { id: 1, name: '正常糖' },
      ice: item.ice || { id: 1, name: '正常冰' },
      addon: Array.isArray(item.addon) ? item.addon : []
    };

    return safeItem;
  }).filter(item => item.id); // 过滤掉没有id的商品
}

// 云函数入口函数
exports.main = async (event, context) => {
  console.log('[updateCart] 开始执行');

  // 获取用户openid
  const wxContext = cloud.getWXContext()
  // 允许传入指定的openid（适用于管理员操作或高权限操作）
  const openid = event.openid || wxContext.OPENID || '';

  console.log('[updateCart] openid:', openid);

  if (!openid) {
    console.error('[updateCart] 未能获取到用户openid');
    return { success: false, error: '未能获取到用户身份信息' };
  }

  // 处理购物车商品数据，确保格式正确
  const sanitizedItems = sanitizeCartItems(event.items);
  console.log('[updateCart] 处理后的商品数据项数:', sanitizedItems.length);

  // 简单方案：直接尝试保存数据，不管集合是否存在
  try {
    console.log('[updateCart] 尝试保存购物车数据');

    // 先尝试查询是否已存在购物车
    let cartRecord = null;
    try {
      const queryRes = await db.collection('cart').where({ openid }).get();
      if (queryRes.data && queryRes.data.length > 0) {
        cartRecord = queryRes.data[0];
      }
    } catch (err) {
      console.log('[updateCart] 查询购物车失败，可能是集合不存在:', err.message || err);
    }

    // 执行添加或更新
    let result;
    if (cartRecord) {
      // 更新已有记录
      console.log('[updateCart] 更新已有购物车:', cartRecord._id);
      result = await db.collection('cart').doc(cartRecord._id).update({
        data: {
          items: sanitizedItems,
          selectedItems: event.selectedItems || [],
          updateTime: db.serverDate(),
          isEmpty: sanitizedItems.length === 0
        }
      });
    } else {
      // 如果没有找到购物车记录且商品列表为空，返回成功但不创建记录
      if (sanitizedItems.length === 0) {
        console.log('[updateCart] 购物车为空，不创建新记录');
        return {
          success: true,
          data: []
        };
      }

      // 创建新记录
      console.log('[updateCart] 创建新购物车记录');
      result = await db.collection('cart').add({
        data: {
          openid,
          items: sanitizedItems,
          selectedItems: event.selectedItems || [],
          updateTime: db.serverDate(),
          isEmpty: false
        }
      });
    }

    console.log('[updateCart] 保存成功:', result);
    return {
      success: true,
      data: sanitizedItems
    };
  } catch (error) {
    console.error('[updateCart] 保存失败:', error);
    return {
      success: false,
      error: error.message || '购物车更新失败'
    };
  }
} 